딥러닝은 신경망(neural network)을 기반으로 한 머신러닝의 한 분야로, 여러 층(layer)을 쌓아 복잡한 패턴을 학습한다.
은닉층의 개수가 많아질수록 더 복잡한 문제를 학습할 수 있다.
이진 분류 문제로, 출력층 활성화 함수는 sigmoid를 사용한다.
본 예제는 read_csv()로 CSV 파일을 불러와 데이터프레임으로 적재하는 절차를 제시한다. head()로 일부 행을 확인하면 열 구조와 데이터 상태를 빠르게 점검할 수 있다.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
df = pd.read_csv("diabetes.csv")
X = df.drop("Outcome", axis=1)
y = df["Outcome"]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
본 예제는 이진 분류 문제를 대상으로 Keras의 Sequential 모델을 구성한다. 은닉층에는 relu, 출력층에는 sigmoid를 사용하고, 손실 함수로 binary_crossentropy를 지정하여 학습이 진행되도록 설정한다.
model = Sequential()
model.add(Dense(12, activation="relu", input_dim=8))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"]
)
model.fit(X_train, y_train, epochs=50, batch_size=10, validation_split=0.2)
회귀 문제이므로 출력층에는 활성화 함수를 사용하지 않는다.
본 예제는 회귀 문제를 대상으로 신경망을 구성한다. 출력층의 노드 수를 1로 두고 활성화 함수를 지정하지 않으며, 손실 함수로 mse, 지표로 mae를 사용하여 예측 오차를 평가한다.
from tensorflow.keras.datasets import boston_housing
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
(X_train, y_train), (X_test, y_test) = boston_housing.load_data()
model = Sequential()
model.add(Dense(64, activation="relu", input_shape=(13,)))
model.add(Dense(64, activation="relu"))
model.add(Dense(1))
model.compile(
optimizer="adam",
loss="mse",
metrics=["mae"]
)
model.fit(X_train, y_train, epochs=100, batch_size=16, validation_split=0.2)
본 예제는 회귀 문제를 대상으로 신경망을 구성한다. 출력층의 노드 수를 1로 두고 활성화 함수를 지정하지 않으며, 손실 함수로 mse, 지표로 mae를 사용하여 예측 오차를 평가한다.
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
data = load_diabetes()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = Sequential()
model.add(Dense(16, activation="relu", input_dim=10))
model.add(Dense(16, activation="relu"))
model.add(Dense(1))
model.compile(optimizer="adam", loss="mse", metrics=["mae"])
model.fit(X_train, y_train, epochs=50, batch_size=2, validation_data=(X_test, y_test))